package com.jml.装饰模式.五期.手写三级缓存.serivce;



import com.jml.装饰模式.五期.手写三级缓存.aop.ExtJmlCache;
import com.jml.装饰模式.五期.手写三级缓存.decorate.JmlCache;
import com.jml.装饰模式.五期.手写三级缓存.entity.UserEntity;
import com.jml.装饰模式.五期.手写三级缓存.mapper.UserMapper;
import com.jml.装饰模式.五期.手写三级缓存.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@Slf4j

public class MemberService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private RedisUtils redisUtils;
    @Autowired
    private JmlCache jmlCache;

//    @RequestMapping("/getUser")
//    public UserEntity getUser(Integer userId) {
//        // 一级和二级缓存
//        // 方法名称+参数名称+参数内容
//        String key = "getUser(Integer)" + userId;
//        // 先查询二级缓存
//        UserEntity redisUser = redisUtils.getEntity(key, UserEntity.class);
//        if (redisUser != null) {
//            return redisUser;
//        }
//        // 先查询我们的一级缓存（Jvm内置）
//        UserEntity jvmUser = JvmMapCacheUtils.getEntity(key, UserEntity.class);
//        if (jvmUser != null) {
//            // 将该缓存数据放入到二级缓存中、
//            redisUtils.putEntity(key, jvmUser);
//            return jvmUser;
//        }
//        // 查询我们的db
//        UserEntity dbUser = userMapper.findByUser(userId);
//        if (dbUser == null) {
//            return null;
//        }
//        // 数据库DB有的情况 将该内容缓存到当前Jvm中
//        JvmMapCacheUtils.putEntity(key, dbUser);
//        return dbUser;
//    }

//    @RequestMapping("/getUser")
//    public UserEntity getUser(Integer userId) {
//        String key = "getUser(Integer)" + userId;
//        return mayiktCache.getCacheEntity(key);
//    }

    @RequestMapping("/getUser")
    @ExtJmlCache
    public UserEntity getUser(Integer userId) {
        return userMapper.findByUser(userId);
    }
}
